﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
using Microsoft.Practices.EnterpriseLibrary.Data;
using Microsoft.Practices.EnterpriseLibrary.ExceptionHandling;
using Chilis.Franquicias.EnEntidad;
using Chilis.Franquicias.DaDatos.Helper;

namespace Chilis.Franquicias.DaDatos
{
    public class EntrevistaDaDatos
    {
        private Database oDatabase = EnterpriseLibraryContainer.Current.GetInstance<Database>(Conexion.cnsSql);

        public ListaFQ_EstadoSolicitud ListaEstadoSolicitudEntrvista()
        {
            ListaFQ_EstadoSolicitud oListaFQ_EstadoSolicitud = new ListaFQ_EstadoSolicitud();
            using (IDataReader oIDataReader = oDatabase.ExecuteReader(Procedimientos.USP_SEL_FQ_ESTADOSOLICITUDENTRVISTA))
            {
                FQ_EstadoSolicitud oFQ_EstadoSolicitud = new FQ_EstadoSolicitud();
                int indiceFQ_EstadoSolicitud_ID = oIDataReader.GetOrdinal("FQ_EstadoSolicitud_ID");
                int indiceEstadoSolicitud = oIDataReader.GetOrdinal("EstadoSolicitud");

                while (oIDataReader.Read())
                {
                    oFQ_EstadoSolicitud = new FQ_EstadoSolicitud();
                    oFQ_EstadoSolicitud.FQ_EstadoSolicitud_ID = DataUtil.DbValueToDefault<Int32>(oIDataReader[indiceFQ_EstadoSolicitud_ID]);
                    oFQ_EstadoSolicitud.EstadoSolicitud = DataUtil.DbValueToDefault<String>(oIDataReader[indiceEstadoSolicitud]);
                    oListaFQ_EstadoSolicitud.Add(oFQ_EstadoSolicitud);
                }
            }
            return oListaFQ_EstadoSolicitud;
        }

        public ListaFQ_Entrevista ListaEstadosSolicitus_Entrvista(FQ_Entrevista oFQ_Entrevista, string sortType, int maximumRows, int startRowIndex, out int Total)
        {
            ListaFQ_Entrevista oListaFQ_Entrevista = new ListaFQ_Entrevista();
            DbCommand oDbCommand = oDatabase.GetStoredProcCommand(Procedimientos.USP_SEL_FQ_ESTADOSSOLICITUS_CANDIDATO);
            oDatabase.AddInParameter(oDbCommand, "@Nombre", DbType.String, oFQ_Entrevista.FQ_Solicitud.FQ_Candidato.Nombre);
            oDatabase.AddInParameter(oDbCommand, "@numeroDocumento", DbType.String, oFQ_Entrevista.FQ_Solicitud.FQ_Candidato.NumeroDocumento);
            oDatabase.AddInParameter(oDbCommand, "@FQ_EstadoSolicitud_ID", DbType.Int32, oFQ_Entrevista.FQ_Solicitud.FQ_EstadoSolicitud.FQ_EstadoSolicitud_ID);
            oDatabase.AddInParameter(oDbCommand, "@TipoCandidato_ID", DbType.Int32, oFQ_Entrevista.FQ_Solicitud.FQ_Candidato.FQ_TipoCandidato.TipoCandidato_ID);
            oDatabase.AddInParameter(oDbCommand, "@sortType", DbType.String, sortType);
            oDatabase.AddInParameter(oDbCommand, "@maximumRows", DbType.Int32, maximumRows);
            oDatabase.AddInParameter(oDbCommand, "@startRowIndex", DbType.Int32, startRowIndex);
            oDatabase.AddOutParameter(oDbCommand, "@Total", DbType.Int32, 10);
            using (IDataReader oIDataReader = oDatabase.ExecuteReader(oDbCommand))
            {
                int indiceFQ_Solicitud_ID = oIDataReader.GetOrdinal("FQ_Solicitud_ID");
                int indiceEstadoSolicitud = oIDataReader.GetOrdinal("EstadoSolicitud");
                int indicenumeroDocumento = oIDataReader.GetOrdinal("numeroDocumento");
                int indiceCandidato = oIDataReader.GetOrdinal("Candidato");
                int indicedireccion = oIDataReader.GetOrdinal("direccion");
                int indicetelefonoFijo = oIDataReader.GetOrdinal("telefonoFijo");
                int indicetelefonoMovil = oIDataReader.GetOrdinal("telefonoMovil");
                int indicecorreoElectronico = oIDataReader.GetOrdinal("correoElectronico");
                while (oIDataReader.Read())
                {
                    oFQ_Entrevista = new FQ_Entrevista();
                    oFQ_Entrevista.FQ_Solicitud = new FQ_Solicitud();
                    oFQ_Entrevista.FQ_Solicitud.FQ_Candidato = new FQ_Candidato();
                    oFQ_Entrevista.FQ_Solicitud.FQ_EstadoSolicitud = new FQ_EstadoSolicitud();
                    oFQ_Entrevista.FQ_Solicitud.FQ_Solicitud_ID = DataUtil.DbValueToDefault<Int32>(oIDataReader[indiceFQ_Solicitud_ID]);
                    oFQ_Entrevista.FQ_Solicitud.FQ_EstadoSolicitud.EstadoSolicitud = DataUtil.DbValueToDefault<String>(oIDataReader[indiceEstadoSolicitud]);
                    oFQ_Entrevista.FQ_Solicitud.FQ_Candidato.NumeroDocumento = DataUtil.DbValueToDefault<String>(oIDataReader[indicenumeroDocumento]);
                    oFQ_Entrevista.FQ_Solicitud.FQ_Candidato.Nombre = DataUtil.DbValueToDefault<String>(oIDataReader[indiceCandidato]);
                    oFQ_Entrevista.FQ_Solicitud.FQ_Candidato.Direccion = DataUtil.DbValueToDefault<String>(oIDataReader[indicedireccion]);
                    oFQ_Entrevista.FQ_Solicitud.FQ_Candidato.TelefonoFijo = DataUtil.DbValueToDefault<String>(oIDataReader[indicetelefonoFijo]);
                    oFQ_Entrevista.FQ_Solicitud.FQ_Candidato.TelefonoMovil = DataUtil.DbValueToDefault<String>(oIDataReader[indicetelefonoMovil]);
                    oFQ_Entrevista.FQ_Solicitud.FQ_Candidato.correoElectronico = DataUtil.DbValueToDefault<String>(oIDataReader[indicecorreoElectronico]);
                    oListaFQ_Entrevista.Add(oFQ_Entrevista);
                }
            }
            Total = Convert.ToInt32(oDatabase.GetParameterValue(oDbCommand, "@Total"));
            return oListaFQ_Entrevista;
        }

        public FQ_Entrevista SeleccionarSolicitudEntrvista(Int32 FQ_Solicitud_ID)
        {
            FQ_Entrevista oFQ_Entrevista = new FQ_Entrevista();
            using (IDataReader oIDataReader = oDatabase.ExecuteReader(Procedimientos.USP_SEL_FQ_SOLISITUD_ENTREVISTA,
                FQ_Solicitud_ID
            ))
            {
                int indiceFQ_Solicitud_ID = oIDataReader.GetOrdinal("FQ_Solicitud_ID");
                int indiceFQ_EstadoSolicitud_ID = oIDataReader.GetOrdinal("FQ_EstadoSolicitud_ID");
                int indiceNombre = oIDataReader.GetOrdinal("Nombre");
                int indicedireccion = oIDataReader.GetOrdinal("direccion");
                int indicenumeroDocumento = oIDataReader.GetOrdinal("numeroDocumento");
                if (oIDataReader.Read())
                {
                    oFQ_Entrevista = new FQ_Entrevista();
                    oFQ_Entrevista.FQ_Solicitud = new FQ_Solicitud();
                    oFQ_Entrevista.FQ_Solicitud.FQ_EstadoSolicitud = new FQ_EstadoSolicitud();
                    oFQ_Entrevista.FQ_Solicitud.FQ_Candidato = new FQ_Candidato();
                    oFQ_Entrevista.FQ_Solicitud.FQ_Solicitud_ID = DataUtil.DbValueToDefault<Int32>(oIDataReader[indiceFQ_Solicitud_ID]);
                    oFQ_Entrevista.FQ_Solicitud.FQ_EstadoSolicitud.FQ_EstadoSolicitud_ID = DataUtil.DbValueToDefault<Int32>(oIDataReader[indiceFQ_EstadoSolicitud_ID]);
                    oFQ_Entrevista.FQ_Solicitud.FQ_Candidato.Nombre = DataUtil.DbValueToDefault<String>(oIDataReader[indiceNombre]);
                    oFQ_Entrevista.FQ_Solicitud.FQ_Candidato.Direccion = DataUtil.DbValueToDefault<String>(oIDataReader[indicedireccion]);
                    oFQ_Entrevista.FQ_Solicitud.FQ_Candidato.NumeroDocumento = DataUtil.DbValueToDefault<String>(oIDataReader[indicenumeroDocumento]);
                }
            }
            return oFQ_Entrevista;
        }

        public int CrearEntrevista(FQ_Entrevista oFQ_Entrevista)
        {
            int resultado = oDatabase.ExecuteNonQuery(Procedimientos.USP_INS_FQ_ENTREVISTA,
                oFQ_Entrevista.FQ_Solicitud.FQ_Solicitud_ID,
                oFQ_Entrevista.FechaRegistro,
                oFQ_Entrevista.NombreEntrevistador,
                oFQ_Entrevista.Comentario,
                oFQ_Entrevista.Motivacion,
                oFQ_Entrevista.Destinatario,
                oFQ_Entrevista.Contactos,
                oFQ_Entrevista.Experiencia,
                oFQ_Entrevista.RespaldoF
            );
            return resultado;
        }


        public int ActualizarEstadoSolicitud(FQ_Solicitud oFQ_Solicitud)
        {
            int resultado = oDatabase.ExecuteNonQuery(Procedimientos.USP_UPD_SOLICITUD_ESTADO,
                oFQ_Solicitud.FQ_Solicitud_ID,
                oFQ_Solicitud.FQ_EstadoSolicitud.FQ_EstadoSolicitud_ID
            );
            return resultado;
        }
    }
}
